package Algorithm_study.recursion_algorithm;

import java.util.Scanner;

/**
 * 用于汉诺塔问题的求解！
 * @author YiWen Wan
 */
public class Hanoi {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入移动圆盘的总数目：");
        int n = scanner.nextInt();
        System.out.println("A表示起始塔座、B表示目的塔座、C表示辅助塔座！");
        HanoiAnswer(n,'A','B','C');
        scanner.close();
    }

    /**
     * 借助C塔座，将圆盘从A塔座移动到B塔座。
     * @param count :用于记录待移动圆盘的数目。
     * @param A：移动圆盘起始塔座。
     * @param B：移动圆盘目的塔座。
     * @param C：移动圆盘辅助塔座。
     */
    public static void HanoiAnswer(int count,char A,char B,char C){
        if (count == 1)//只有一块时，直接移动过去
            Move(A,B);
        else{
            HanoiAnswer(count-1, A,C,B);//将count-1个圆盘从A移动到C
            Move(A,B);//将A下面的那个最大的直接移动到B上
            HanoiAnswer(count-1, C, B, A);//将count-1个圆盘从C移动回B
        }
    }

    /**
     * 用于输出圆盘移动的步骤
     * @param A：表示移动圆盘起始塔座。
     * @param B：表示移动圆盘目的塔座。
     */
    public static void Move(char A,char B){
        System.out.println(A+"——>"+B);
    }
}
